#ifndef _HEADER_H_
#define _HEADER_H_

#include "arch_datos.h"

class Header : public Archivo {

	private:
		
		unsigned int calcular_tam_header(std::string &formato);
		
		Bloque * generar_bloque(unsigned int tam,std::string &formato,ArchivoDatos * arch);
		
		//unsigned int tam_header;	//para el tamaño del header
		unsigned int tam_bloque_mae;//para el tam del bloque maestro
		unsigned int tam_bloque_ind;//para el tam del bloque del ind
		TiposArchivo tipo_archivo_mae;  //para el tipo de archivo
		TiposArchivo tipo_indice_sec;//para el tipo de indice
		int 		 num_campo_ind; //para el num de campo del indice sec
		std::string  formato;   //para el nombre del archivo
		
	public:
	
		Header(std::string& nombre);
		
		~Header();
						
		void crear() throw(ExcepCreandoArch, ExcepSintaxisParser, ExcepBloqueTam);
		
		//IMPLEMENTO LOS METODOS DE ARCHIVO
		
		virtual void abrir() throw(ExcepAbriendoArch);
		
		virtual void cerrar();
 													
		virtual void eliminar();
		
		unsigned int get_espacio_libre()  throw(ExcepArchCerrado, ExcepLeerBloque);
		
		TiposArchivo get_tipo_archivo(); 	
 		
 		void guardar(std::string &formato, ArchivoDatos * arch) throw(ExcepArchCerrado);
 		
 		void hidratar(std::string &nombre) throw(ExcepArchInexistente);
 		
 		//unsigned int get_tam_header();	
 		unsigned int get_tam_bloque_mae();    
		unsigned int get_tam_bloque_ind();
		TiposArchivo get_tipo_archivo_mae();  
		TiposArchivo get_tipo_indice_sec();   
		int 		 get_num_campo_ind(); 
		std::string  get_formato();
 		
 		
 		
};

#endif
